package org.rescue.analysis.InterCollection;

public class CCandidateData {
	public String label;
	public int id;
	double infoLoss;
	public int subCandsCount;	
	public int dCard1;
	public int card1;
	public int dCard2;
	public int card2;
	public boolean isCand; // whether a node is cand or simply a merge destination.
	public boolean includeInCand;
	
	/*
	 * Suppose we are looking at children of c, {c_1, c_2, .., c_n}.
	 * Every time all candidate sets of c's children are combined, Each
	 * c_i is also eligible as a candidate. This is indicated by setting the
	 * flag c_i.includeInCand = true. But still the c_i is not actually a
	 * candidate yet, so c_i.isCand is still false (except for leaf nodes which are
	 * candidates of themselves by default). 
	 * 
	 * Then, when c_i is is merged with any of its descendant candidates,
	 * c_i.isCand is set to true but the size of candidates, c_i.subCandsCount,
	 * remains the same. Hence, in the next round, the newly merged c_i gets
	 * its score computed and is considered as a candidate. If the c_i is chosen
	 * for merger, then its c_i.isCand flag is set to false and now 
	 * c_i.subCandsCount is reduced by 1. This switching of isCand flag continues
	 * as long as a candidate is merged with c_i. In this way, we explore candidate
	 * sets of size k include c_i as well as those that do not include c_i. 
	 * 
	 * Obviously, when one candidate node is merged to another candidate, we
	 * reduce the subCandsCount by 1.
	 * 
	 * Notice that c.includeInCand is set to false but still a c_i can be
	 * merged into it.
	 */
	

	public CCandidateData() {
		infoLoss = 0.0;
		subCandsCount = 0;
	}
}
